﻿#define _CRT_SECURE_NO_WARNINGS


//一个数组中只有两个数字是出现一次，其他所有数字都出现了两次。
//编写一个函数找出这两个只出现一次的数字。
//
//例如：
//有数组的元素是：1，2，3，4，5，1，2，3，4，6
//只有5和6只出现1次，要找出5和6.
// 
// 
//#include <stdio.h>
//void fun(int* a)
//{
//	int i = 0;
//	int s = 0;
//	for (i = 0; i < 10; i++)
//	{
//		s ^= *(a + i);
//	}
//	int s1 = s ^= (-s);
//	int n1 = 0, n2 = 0;
//	
//	for (i = 0; i < 10; i++)
//	{
//		if (a[i] & s1 != 0)
//		{
//			n1 ^= a[i];
//		}
//		else
//		{
//			n2 ^= a[i];
//		}
//	}
//	printf("出现过一次的数字有：");
//	printf("%d,%d", n1,n2);
//}
//int main()
//{
//	int a[10];
//	int i = 0;
//	printf("请定义数组：\n");
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &a[i]);
//	}
//	fun(a);
//	return 0;
//}

//#include <stdio.h>
//void fun(int* a)
//{
//	int i = 0;
//	int s = 1;
//	int n1 = 0, n2 = 0;
//
//	for (i = 0; i < 10; i++)
//	{
//		if (a[i] & s != 0)
//		{
//			n1 ^= a[i];
//		}
//		else
//		{
//			n2 ^= a[i];
//		}
//	}
//	printf("出现过一次的数字有：");
//	printf("%d,%d", n1, n2);
//}
//int main()
//{
//	int a[10];
//	int i = 0;
//	printf("请定义数组：\n");
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &a[i]);
//	}
//	fun(a);
//	return 0;
//}



//KiKi想获得某年某月有多少天，请帮他编程实现。输入年份和月份，计算这一年这个月有多少天。

//#include <stdio.h>
//int fun(int y, int m )
//{
//		switch (m)
//		{
//		  case 1:
//		  case 3:
//		  case 5:
//		  case 7:
//		  case 8:
//		  case 10:
//		  case 12: printf("本月有%d天", 31); break;
//		  case 4:
//		  case 6:
//		  case 9:
//		  case 11:printf("本月有%d天", 30); break;
//		  case 2:  
//		  {
//			  if ((y % 4 == 0  && y % 100 != 0)||(y % 400 == 0))
//			  {
//				  printf("本月有%d天", 29); 
//			  }
//			  else
//			  {
//				  printf("本月有%d天", 28);
//			  }
//		  }
//		}
//}
//int main()
//{
//	int year = 0, month = 0;
//	printf("请属于你要查询的年份和月：");
//	scanf("%d %d", &year, &month);
//	fun(year, month);
//	return 0;
//}



//课堂转移表实践
//#include <stdio.h>
//int add(int a, int b)
//{
//	return a + b;
//}
//int sub(int a, int b)
//{
//	return a - b;
//}
//int mul(int a, int b)
//{
//	return a * b;
//}
//int div(int a, int b)
//{
//	return a / b;
//}
//int main()
//{
//	int x, y;
//	int input = 1;
//	int ret = 0;
//	int(*p[5])(int x, int y) = { 0, add, sub, mul, div };  
//	do
//	{
//		printf("*************************\n");
//		printf(" 1:add 2:sub \n");
//		printf(" 3:mul 4:div \n");
//		printf(" 0:exit \n");
//		printf("*************************\n");
//		printf("请选择：");
//		scanf("%d", &input);
//		if ((input <= 4 && input >= 1))
//		{
//			printf("输⼊操作数：");
//			scanf("%d %d", &x, &y);
//			ret = (*p[input])(x, y);
//			printf("ret = %d\n", ret);
//		}
//		else if (input == 0)
//		{
//			printf("退出计算器\n");
//		}
//		else
//		{
//			printf("输⼊有误\n");
//		}
//	} while (input);
//	return 0;
//}



//qsort函数练习
// 
//#include <stdio.h>
//int fun(void* p1, void* p2)
//{
//	return (*(int*)p1 - *(int*)p2);
//}
//int main()
//{
//	int a[] = { 6,5,1,2,3,4,0,9,7,8 };
//	int sz1 = sizeof(a) / sizeof(a[0]);
//	int sz2 = sizeof(int);
//	qsort(a, sz1, sz2, fun);
//	int i = 0;
//	for (i = 0; i < sz1; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	return 0;
//}

//#include <stdio.h>
//#include <string.h>
//struct stu
//{
//	char name[100];
//	int score;
//};
//int cmp_name(const void* p1, const void* p2)
//{
//	return strcmp(((struct stu*)p1)->name,((struct stu*)p2)->name);
//}
//
//
//int main()
//{
//	struct stu s[] = { {"zhangsan", 89}, {"lisi", 93}, {"wangwu", 78} };
//	int sz = sizeof(s) / sizeof(s[0]);
//	qsort(s, sz, sizeof(s[0]), cmp_name);
//	return 0;
//}

//#include <stdio.h>
//#include <string.h>
//struct stu
//{
//	char name;
//	int score;
//};
//int cmp_score(const void* p1, const void* p2)
//{
//	return strcmp(((struct Stu*)p1)->csore, ((struct Stu*)p2)->score);
//}
//
//
//int main()
//{
//	struct stu s[] = { {"zhangsan", 89}, {"lisi", 93}, {"wangwu", 78} };
//	int sz = sizeof(s) / sizeof(s[0]);
//	qsort(s, sz, sizeof(s[0]), cmp_score);
//	return 0;
//}

//#include <stdio.h>
//#include <string.h>
//struct Stu 
//{
//	char name[20];
//	int age;
//};
//int cmp_stu_by_age(const void* e1, const void* e2)
//{
//	return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
//}
//int cmp_stu_by_name(const void* e1, const void* e2)
//{
//	return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
//}
//void test2()
//{
//	struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };
//	int sz = sizeof(s) / sizeof(s[0]);
//	qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
//	int i = 0;
//	for (i = 0; i < 2; i++)
//	{
//		printf("%s,%d", (*s).name[i],(*s).age);
//		printf("\n");
//	}
//}
//void test3()
//{
//	struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };
//	int sz = sizeof(s) / sizeof(s[0]);
//	qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
//	int i = 0;
//	for (i = 0; i < 2; i++)
//	{
//		printf("%s,%d", s->name[i],s->age);
//		printf("\n");
//	}
//}
//int main()
//{
//	test2();
//	test3();
//	return 0;
//}

//模拟qsort函数

//#include <stdio.h>
//int int_cmp(const void* p1, const void* p2)
//{
//	return (*(int*)p1 - *(int*)p2);
//}
//void swap(void* p1, void* p2, int size)
//{
//	int i = 0;
//	for (i = 0; i < size; i++)
//	{
//		char tmp = *((char*)p1 + i);
//		*((char*)p1 + i) = *((char*)p2 + i);
//		*((char*)p2 + i) = tmp;
//	}
//}
//void bubble(void* base, int count, int size, int(*cmp)(void*, void*))
//{
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < count - 1; i++)
//	{
//		for (j = 0; j < count - i - 1; j++)
//		{
//			if (cmp((char*)base + j * size, (char*)base + (j + 1) * size) > 0)
//			{
//				swap((char*)base + j * size, (char*)base + (j + 1) * size,
//					size);
//			}
//		}
//	}
//}
//int main()
//{
//	int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
//	int i = 0;
//	bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);
//	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//	return 0;
//}


